{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import networkx as nx"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "G = nx.Graph()\n",
    "G.add_edge(1, 2)  # default edge data=1\n",
    "G.add_edge(2, 3, weight=0.9)  # specify edge data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "import math\n",
    "G.add_edge('y', 'x', function=math.cos)\n",
    "G.add_node(math.cos)  # any hashable can be a node"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "elist = [(1, 2), (2, 3), (1, 4), (4, 2)]\n",
    "G.add_edges_from(elist)\n",
    "elist = [('a', 'b', 5.0), ('b', 'c', 3.0), ('a', 'c', 1.0), ('c', 'd', 7.3)]\n",
    "G.add_weighted_edges_from(elist)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "['a', 'c', 'd']\n"
     ]
    }
   ],
   "source": [
    "G = nx.Graph()\n",
    "e = [('a', 'b', 0.3), ('b', 'c', 0.9), ('a', 'c', 0.5), ('c', 'd', 1.2)]\n",
    "G.add_weighted_edges_from(e)\n",
    "print(nx.dijkstra_path(G, 'a', 'd'))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 432x288 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "G = nx.cubical_graph()\n",
    "subax1 = plt.subplot(121)\n",
    "nx.draw(G)   # default spring_layout\n",
    "subax2 = plt.subplot(122)\n",
    "nx.draw(G, pos=nx.circular_layout(G), node_color='r', edge_color='b')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "{'A': {'B': {}}, 'B': {'A': {}, 'C': {}}, 'C': {'B': {}}}\n"
     ]
    }
   ],
   "source": [
    "G = nx.Graph()\n",
    "G.add_edge('A', 'B')\n",
    "G.add_edge('B', 'C')\n",
    "print(G.adj)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "300\n",
      "red\n"
     ]
    }
   ],
   "source": [
    "G = nx.Graph()\n",
    "G.add_edge(1, 2, color='red', weight=0.84, size=300)\n",
    "print(G[1][2]['size'])\n",
    "print(G.edges[1, 2]['color'])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3.9.12 ('base')",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.9.13"
  },
  "orig_nbformat": 4,
  "vscode": {
   "interpreter": {
    "hash": "4dd7066ec88c3c576f61d5cbc41d9fb859f858b534fdb9153cc6021ce028ab1d"
   }
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
